#include <iostream>     // std::cout, std::cin
#include <algorithm>    // std::sort
#include <vector>       // std::vector

#include "ej3.h"

using namespace std;

Coordenada::Coordenada(int new_x,int new_y)
{
 x = new_x;
 y = new_y;
}


Tablero::Tablero()
{
  cin >> tamanio;
  cin >> pos_ini_x;
  cin >> pos_ini_y;
  cin >> pos_fin_x;
  cin >> pos_fin_y;
  cin >> k;
  posiciones.resize(tamanio);

  for (int i = 0; i < tamanio; i++)
  {
    posiciones[i].resize(tamanio);
  }
}

list <Coordenada> pedir_entrada(Tablero &t)
{
  list <Coordenada> coordenadas;
  for(int i = 0; i < t.tamanio; i++)
  {
    for(int j = 0; j < t.tamanio; j++)
    {
      int pot;
      cin >> pot;
      t.posiciones[i][j] = Resorte(pot);
      coordenadas.push_back(Coordenada(i,j));
    }
  }
  return coordenadas;
}

/*list <Coordenada> eliminarPosiciones(Tablero &t, list <Coordenada> &coordenadas, Coordenada coordenada)
{
  list <Coordenada> coordenadasEliminadas;
  int salto = t.posiciones[coordenada.x][coordenada.y];
  for(int i = 1; i <= salto; i++)
    {
    coordenadas.remove(Coordenada(coordenada.x+i, coordenada.y));
    coordenadasEliminadas.push_back(Coordenada(coordenada.x+i, coordenada.y));
    }
  for(int i = 1; i <= salto; i++)
    {
    coordenadas.remove(Coordenada(coordenada.x, coordenada.y+i));
    coordenadasEliminadas.push_back(Coordenada(coordenada.x, coordenada.y+i));
    }
  for(int i = 1; i <= salto; i++)
    { 
    coordenadas.remove(Coordenada(coordenada.x, coordenada.y-i));
    coordenadasEliminadas.push_back(Coordenada(coordenada.x, coordenada.y-i));
    }
  for(int i = 1; i <= salto; i++)
    {
    coordenadas.remove(Coordenada(coordenada.x-i, coordenada.y));
    coordenadasEliminadas.push_back(Coordenada(coordenada.x-i, coordenada.y));
    }
  return coordenadasEliminadas;
}

void buscarMin(Tablero &t, list <Coordenada> &coordenadas)
{
  Coordenada nuevaCoord = Coordenada(t.pos_ini_x,t.pos_ini_y);
  list elementos_elim = eliminarPosiciones(t,coord,nuevaCoord);
  list elementos_elim1;
  while(!finEncontrado)
  {
    for(int i; i < elementos_elim.size(); i++)
       eliminarPosiciones(t,coord,nuevaCoord);
  }
}
*/
void buscarMin(Tablero &t, list <Coordenada> &coordenadas)
{
  bool finEncontrado = false;
  t.posiciones[t.pos_ini_x][t.pos_ini_y].status = amarillo;
  int n = t.tamanio;
  while(!finEncontrado)
  {
    for(int i = 0; i < n; i++)
    {
      for(int j = 0; j < n; j++)
      {
	cout << "Chequeando: " << i << " " << j << endl;
	if(t.posiciones[i][j].status == amarillo)
	{
	  cout << "amarillo!..." << endl;
	  if(i == t.pos_fin_x && i == t.pos_fin_y == j)
	  {
	    cout << "Camino Encontrado!";
	    finEncontrado = true;
	  }
	  int pot = t.posiciones[i][j].potencia;
	  for(int k = 0; k <= pot ; k++ )
	  {
	    if((t.posiciones[i+k][j].status == amarillo) && (k+i < n))
	    {t.posiciones[i+k][j].status= amarillo;}
	    if((t.posiciones[i][j+k].status == amarillo) && (k+j < n))
	    {t.posiciones[i][j+k].status = amarillo;}
	    if((t.posiciones[i][j-k].status == amarillo) && (i-k < n))
	    {t.posiciones[i][j-k].status = amarillo;}
	    if((t.posiciones[i][j-k].status == amarillo) && (j-k < n))
	    {t.posiciones[i][j-k].status = amarillo;}
	  }
	  t.posiciones[i][j].status == rojo;
	}
      }
    }
  }
}
int main()
{
  list <Coordenada> coord;
  Tablero t = Tablero();
  coord = pedir_entrada(t);
  buscarMin(t,coord);
  return 0;
}
